function [lambda,gamma,dv,sp]=rfs(sub_size,S,Y,flag,K)
% 随机特征选择
% Input:
%   sub_size - 所有子问题的最大维度
%   S - 样本点矩阵 (m x d), m=样本点数量, d=维度
%   Y - 对应S中点的目标函数值
%   flag - 确定使用哪种类型RBF模型的字符串
%   K - 子问题的数量
%
% Output:
%   lambda, gamma - RBF模型参数向量
%   dv - 每个子问题的决策变量索引
%   sp - 用于训练每个子问题模型的样本索引


[n,m]=size(S);

%% RF training
i = 1;
while i<=K
    % 随机选择子问题维度
    d = randi([1, min(sub_size, m)]);
    
    % 随机选择决策变量
    M = randperm(m, d);
    
    % 随机选择训练样本
    L = randperm(n, min(2*d, n));
    
    S1 = S(L,M);     % 训练集
    Y1 = Y(L,:);
    
    % 为每个子问题训练模型
    [lambda{i},gamma{i}] = rbf(S1,Y1,flag);
    
    dv{i} = M;  % 决策变量索引
    sp{i} = L;  % 样本索引
    
    % 检查模型参数是否有效
    if sum(isnan(lambda{i}))==0 
         i=i+1;
    end  
end

end %function
